n, y = map(int, input().split())
k = list(map(int, input().split()))
a = list(map(int, input().split()))

from collections import defaultdict

# 初始化动态规划字典，dp[x] 表示进入当前层前金币为 x 时的累计价值
dp = defaultdict(int)
dp[y] = 0  # 初始金币为 y，累计价值为 0

for i in range(n):
    next_dp = defaultdict(int)
    current_k = k[i]
    current_a = a[i]
    current_layer = i + 1  # 第 i+1 层

    for x in dp:
        total = x + current_k
        # 处理 SKIP 操作：将 total 金币带入下一层，价值不变
        next_dp[total] = max(next_dp.get(total, 0), dp[x])
        # 处理 ALLIN 操作：花光 total 金币，计算价值并更新金币为 0
        value = (total // current_layer) * current_a
        next_dp[0] = max(next_dp.get(0, 0), dp[x] + value)
    dp = next_dp

# 输出所有可能金币状态中的最大累计价值
print(max(dp.values()))